package com.pan.admin.module.loanProduct.dao;

import com.pan.admin.module.loanProduct.entity.LoanProductPlan;
import com.pan.admin.module.loanProduct.entity.po.OrgPlanApplyPO;
import com.pan.admin.module.loanProduct.entity.qo.LoanProductPlanKeywordQO;
import com.pan.admin.module.loanProduct.entity.qo.OrgPlanApplyQO;
import com.pan.admin.module.loanProduct.entity.vo.LoanProductPlanVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 配置机构计划Dao接口
 *
 * @author ts
 * @date 2023-12-27
 */
@Mapper
public interface LoanProductPlanDao {

    /**
     * 计划
     */
    List<Map<String, Object>> listLoanProductPlan(@Param("loanProductId") List<Long> loanProductId, @Param("keyword") String keyword);

    /**
     * 计划（有数据权限）
     */
    List<Map<String, Object>> listLoanProductPlanWithDataScope(LoanProductPlanKeywordQO keyword);

    /**
     * 查询所有计划-业务中不允许使用
     *
     * @return 配置机构计划集合
     */
    List<LoanProductPlan> listAll();

    String findLoanProductPlanNameByLoanProductPlanId(@Param("loanProductPlanId") Long loanProductPlanId);

    /**
     * 根据ID获取列表配置机构计划
     *
     * @param id 配置机构计划主键
     * @return 配置机构计划
     */
    LoanProductPlan getById(Long id);

    /**
     * 根据ID获取列表配置机构计划（有数据权限）
     *
     * @param loanProductPlan 配置机构计划信息
     * @return 配置机构计划
     */
    LoanProductPlan getByIdWithDataScope(LoanProductPlan loanProductPlan);

    /**
     * 查询配置机构计划列表(有数据权限)
     *
     * @param loanProductPlan 配置机构计划
     * @return 配置机构计划集合
     */
    List<LoanProductPlan> listWithDataScope(LoanProductPlan loanProductPlan);

    /**
     *  根据计划ids获取当前进件数量
     *
     *  @param orgPlanApplyQO
     *  @return
     */
    List<OrgPlanApplyPO> listApplyTotalByIds(OrgPlanApplyQO orgPlanApplyqo);

    /**
     * 新增配置机构计划
     *
     * @param loanProductPlan 配置机构计划
     * @return 结果
     */
    int insertLoanProductPlan(LoanProductPlanVO loanProductPlan);

    /**
     * 修改配置机构计划
     *
     * @param loanProductPlan 配置机构计划
     * @return 结果
     */
    int updateLoanProductPlan(LoanProductPlanVO loanProductPlan);

    /**
     * 删除配置机构计划
     *
     * @param id 配置机构计划主键
     * @return 结果
     */
    int deleteById(Long id);

    /**
     * 批量删除配置机构计划
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int batchDeleteById(Long[] ids);

    /**
     *  根据计划id更新状态
     *
     *  @param loanProductPlan
     *  @return
     */
    int updateStatusById(LoanProductPlanVO loanProductPlan);
}
